import numpy as np
import cv2 as cv

# 读取视频文件
cap = cv.VideoCapture("image/DOG.wmv")

"""
获取视频的一帧图像
    ret, frame = cap.read()
参数：
    ret: 若获取成功返回True，获取失败，返回False
    Frame: 获取到的某一帧的图像
"""

# # 判断是否读取成功
# while(cap.isOpened()):
#     # 获取每一帧图像
#     ret, frame = cap.read()
#     # 判断是否获取成功
#     if ret == True:
#         cv.imshow("frame", frame)
#     if cv.waitKey(25) & 0xFF == ord("q"):
#         break
#
# cap.release()
# cv.destroyAllWindows()


"""
创建视频写入的对象
    out = cv2.VideoWriter(filename,fourcc, fps, frameSize)
参数：
    filename：视频保存的位置
    fourcc：指定视频编解码器的4字节代码
    fps：帧率
    frameSize：帧大小

设置视频的编解码器，如下所示，
    retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )
参数：
    c1,c2,c3,c4: 是视频编解码器的4字节代码，在fourcc.org中找到可用代码列表，与平台紧密相关，常用的有：
    在Windows中：DIVX（.avi）
    在OS中：MJPG（.mp4），DIVX（.avi），X264（.mkv）。
    利用cap.read()获取视频中的每一帧图像，并使用out.write()将某一帧图像写入视频中。

使用cap.release()和out.release()释放资源。
"""

# 图像保存
width = int(cap.get(3))
height = int(cap.get(4))

out = cv.VideoWriter("image/out.avi", cv.VideoWriter_fourcc("M", "J", "P", "G"), 10, (width, height))

while(True):
    ret, frame = cap.read()
    if ret :
        out.write(frame)
    else:
        break

cap.release()
out.release()
cv.destroyAllWindows()